home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / utility / 100 / scrprot.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-01-16  |  10.4 KB  |  395 lines

  1. /***********************************************/
  2. /*   Author:    Raymond Miville-Deschênes      */
  3. /*   Module:    SCREEN PROTECT,  Version 1.0   */
  4. /*   Version:   May 21, 1986                   */
  5. /***********************************************/
  6.  
  7. extern  long    bios();
  8. extern  long    xbios();
  9. extern  long    gemdos();
  10.  
  11. typedef struct object
  12. {
  13.         int             ob_next;
  14.         int             ob_head;
  15.         int             ob_tail;
  16.         unsigned int    ob_type;
  17.         unsigned int    ob_flags;
  18.         unsigned int    ob_state;
  19.         long            ob_spec;
  20.         int             ob_x;
  21.         int             ob_y;
  22.         int             ob_width;
  23.         int             ob_height;
  24. } OBJECT;
  25.  
  26. typedef struct text_edinfo
  27. {
  28.         long            te_ptext;
  29.         long            te_ptmplt;
  30.         long            te_pvalid;
  31.         int             te_font;
  32.         int             te_junk1;
  33.         int             te_just;
  34.         int             te_color;
  35.         int             te_junk2;
  36.         int             te_thickness;
  37.         int             te_txtlen;
  38.         int             te_tmplen;
  39. } TEDINFO;
  40.  
  41. typedef struct bit_block
  42. {
  43.         long    bi_pdata;
  44.         int     bi_wb;
  45.         int     bi_hl;
  46.         int     bi_x;
  47.         int     bi_y;
  48.         int     bi_color;
  49. } BITBLK;
  50.  
  51. char *rs_strings[] = {
  52. "Screen Protect",
  53. "",
  54. "",
  55. "Authors",
  56. "",
  57. "",
  58. "---------",
  59. "",
  60. "",
  61. "Raymond Miville-Deschênes",
  62. "",
  63. "",
  64. "Alain Plouffe",
  65. "",
  66. "",
  67. "OK",
  68. "CANCEL",
  69. "F.A.S.T.E.R.  Montreal",
  70. "",
  71. "",
  72. "Federated Atari ST Enthusiasts Regroupin",
  73. "",
  74. "",
  75. "g",
  76. "",
  77. "",
  78. "Fédération Atari ST des Enthousiastes",
  79. "",
  80. "",
  81. " Regroupés",
  82. "",
  83. "",
  84. "BBS: (514) 489-0680",
  85. "",
  86. "",
  87. "Hit any key to return to Desktop",
  88. "",
  89. "",
  90. "Tapez une clé pour revenir au Bureau",
  91. "",
  92. ""};
  93.  
  94. int IMAG0[] = {
  95. 0x0, 0x0, 0x0, 0x0, 
  96. 0x0, 0x0, 0x0, 0x0, 
  97. 0x0, 0x0, 0x0, 0x0, 
  98. 0x0, 0x0, 0x0, 0x0, 
  99. 0x0, 0x0, 0x0, 0x0, 
  100. 0x0, 0x0, 0x0, 0x0, 
  101. 0x0, 0x0, 0x0, 0x0, 
  102. 0x0, 0x0, 0x3FFF, 0xFFFF, 
  103. 0xFFFF, 0xFFFF, 0xFFFF, 0xC000, 
  104. 0x6000, 0x0, 0x0, 0x0, 
  105. 0x0, 0x6000, 0x5FF5, 0x5555, 
  106. 0x5555, 0x5555, 0x5555, 0xA000, 
  107. 0x5FEA, 0xAAAA, 0xAAAA, 0xAAAA, 
  108. 0xAAAB, 0xA000, 0x5FD5, 0x5555, 
  109. 0x5555, 0x5555, 0x5557, 0xA000, 
  110. 0x5FAA, 0xAAAA, 0xAAAA, 0xAAAA, 
  111. 0xAAAF, 0xA000, 0x5F55, 0x5555, 
  112. 0x5555, 0x5555, 0x555F, 0xA000, 
  113. 0x5EAA, 0xAAAA, 0xAAAA, 0xAAAA, 
  114. 0xAABF, 0xB000, 0x5D55, 0x5555, 
  115. 0x5555, 0x5555, 0x557F, 0x9800, 
  116. 0x5800, 0x0, 0x0, 0x0, 
  117. 0xFF, 0x8F80, 0x5FFF, 0xFFFF, 
  118. 0xFFFF, 0xFFFF, 0xFFFF, 0x98C0, 
  119. 0x5FFF, 0xFFFF, 0xFFFF, 0xFFFF, 
  120. 0xFFFF, 0xB040, 0x6000, 0x0, 
  121. 0x0, 0x0, 0x0, 0x6040, 
  122. 0x5FFF, 0xFFFF, 0xFFFF, 0xFFFF, 
  123. 0xFFFF, 0xA040, 0x5FFF, 0xFFFF, 
  124. 0xFFFF, 0xFFFE, 0x0, 0xA060, 
  125. 0x5FFF, 0xFFFF, 0xFFFF, 0xFFFD, 
  126. 0x4315, 0xA020, 0x5E00, 0x0, 
  127. 0x0, 0x38, 0x3, 0xA020, 
  128. 0x5DEF, 0x7BDE, 0xF7BD, 0xEF7F, 
  129. 0xFFFF, 0xA020, 0x5AD6, 0xB5AD, 
  130. 0x6B5A, 0xD6FF, 0xFFFF, 0xA1F0, 
  131. 0x57BD, 0xEF7B, 0xDEF7, 0xBDFF, 
  132. 0xFFFF, 0xA330, 0x6000, 0x0, 
  133. 0x0, 0x0, 0x0, 0x6210, 
  134. 0x5FFF, 0xFFFF, 0xFFFF, 0xFFFF, 
  135. 0xFFFF, 0xA338, 0x5FFF, 0xFFFF, 
  136. 0xFFFF, 0xFFFF, 0xFFFF, 0xA1E8, 
  137. 0x5800, 0x0, 0x0, 0xC00, 
  138. 0xC001, 0xA008, 0x5B6D, 0xB6DB, 
  139. 0x6DB6, 0xEDEE, 0xDB6D, 0xA008, 
  140. 0x5B6D, 0xB6DB, 0x6DB6, 0xEDEE, 
  141. 0xDB6D, 0xA008, 0x5800, 0x0, 
  142. 0x0, 0xC00, 0xC001, 0xA018, 
  143. 0x5BB6, 0xDB6D, 0xB6DB, 0x6DB6, 
  144. 0xDB6D, 0xA030, 0x5BB6, 0xDB6D, 
  145. 0xB6DB, 0x6DB6, 0xDB6D, 0xA060, 
  146. 0x5800, 0x0, 0x3, 0xC00, 
  147. 0xC001, 0xA040, 0x5BDB, 0x6DB6, 
  148. 0xDB6F, 0x6DB6, 0xDB6D, 0xA040, 
  149. 0x5BDB, 0x6DB6, 0xDB6F, 0x6DB6, 
  150. 0xDB6D, 0xA0E0, 0x5800, 0x0, 
  151. 0x0, 0xC00, 0xC001, 0xA1B0, 
  152. 0x5BED, 0xB6DB, 0x6DB8, 0xC00, 
  153. 0xDB6D, 0xAF5E, 0x5BED, 0xB6DB, 
  154. 0x6DBB, 0xFFFF, 0xDB6D, 0xA802, 
  155. 0x5800, 0x0, 0x3, 0xFFFF, 
  156. 0xC00D, 0xABBA, 0x5877, 0xFFFF, 
  157. 0xFEE3, 0xFFFF, 0xDF6D, 0xABBA, 
  158. 0x5F77, 0xFFFF, 0xFEEF, 0xFFFF, 
  159. 0xDF6D, 0xABBA, 0x5F00, 0x0, 
  160. 0xF, 0xFFFF, 0xC001, 0xA802, 
  161. 0x5F00, 0x0, 0xF, 0xFFFF, 
  162. 0xC001, 0xABFA, 0x51FF, 0xFFFF, 
  163. 0xFFFF, 0xFFFF, 0xFFFF, 0xABFA, 
  164. 0x5FFF, 0xFFFF, 0xFFFF, 0xFFFF, 
  165. 0xFFFF, 0xABFA, 0x4000, 0x0, 
  166. 0x0, 0x0, 0x0, 0x2BFA, 
  167. 0x6000, 0x0, 0x0, 0x0, 
  168. 0x0, 0x6BBA, 0x3FFF, 0xFFFF, 
  169. 0xFFFF, 0xFFFF, 0xFFFF, 0xCBBA, 
  170. 0x0, 0x0, 0x0, 0x0, 
  171. 0x0, 0xB5A, 0x0, 0x0, 
  172. 0x0, 0x0, 0x0, 0x8A2, 
  173. 0x0, 0x0, 0x0, 0x0, 
  174. 0x0, 0x802, 0x0, 0x0, 
  175. 0x0, 0x0, 0x0, 0xFFE, 
  176. 0x0, 0x0, 0x0, 0x0, 
  177. 0x0, 0x0, 0x0, 0x0, 
  178. 0x0, 0x0, 0x0, 0x0};
  179.  
  180. BITBLK rs_bitblk[] = {
  181. 0L, 12, 56, 0, 0, 1};
  182.  
  183. TEDINFO rs_tedinfo[] = {
  184. 0L, 1L, 2L, 3, 6, 0, 0x1100, 0x0, -1, 15,1,
  185. 3L, 4L, 5L, 3, 6, 0, 0x1100, 0x0, -1, 8,1,
  186. 6L, 7L, 8L, 3, 6, 0, 0x1100, 0x0, -1, 10,1,
  187. 9L, 10L, 11L, 3, 6, 0, 0x1100, 0x0, -1, 26,1,
  188. 12L, 13L, 14L, 3, 6, 0, 0x1100, 0x0, -1, 14,1,
  189. 17L, 18L, 19L, 3, 6, 0, 0x1300, 0x0, -1, 23,1,
  190. 20L, 21L, 22L, 3, 6, 0, 0x1300, 0x0, -1, 41,1,
  191. 23L, 24L, 25L, 3, 6, 0, 0x1300, 0x0, -1, 2,1,
  192. 26L, 27L, 28L, 3, 6, 0, 0x1300, 0x0, -1, 38,1,
  193. 29L, 30L, 31L, 3, 6, 0, 0x1300, 0x0, -1, 11,1,
  194. 32L, 33L, 34L, 3, 6, 0, 0x1300, 0x0, -1, 20,1,
  195. 35L, 36L, 37L, 3, 6, 0, 0x1200, 0x0, -1, 30,1,
  196. 38L, 39L, 40L, 3, 6, 0, 0x1200, 0x0, -1, 38,1};
  197.  
  198. OBJECT rs_object[] = {
  199. -1, 1, 16, 20, 0x0, 0x10, 0x21101L, 0,0, 53,17,
  200. 2, -1, -1, 21, 0x0, 0x0, 0x0L, 3,1, 14,1,
  201. 3, -1, -1, 21, 0x0, 0x0, 0x1L, 29,1, 7,1,
  202. 4, -1, -1, 21, 0x0, 0x8, 0x2L, 28,2, 9,1,
  203. 5, -1, -1, 21, 0x0, 0x0, 0x3L, 20,3, 25,1,
  204. 6, -1, -1, 23, 0x0, 0x20, 0x0L, 3,3, 12,2051,
  205. 7, -1, -1, 21, 0x0, 0x0, 0x4L, 26,4, 13,1,
  206. 8, -1, -1, 26, 0x7, 0x0, 0xFL, 23,6, 8,1,
  207. 9, -1, -1, 26, 0x5, 0x0, 0x10L, 35,6, 8,1,
  208. 10, -1, -1, 21, 0x0, 0x0, 0x5L, 16,9, 22,1,
  209. 11, -1, -1, 21, 0x0, 0x0, 0x6L, 6,10, 40,1,
  210. 12, -1, -1, 21, 0x0, 0x0, 0x7L, 46,10, 1,1,
  211. 13, -1, -1, 21, 0x0, 0x0, 0x8L, 3,11, 37,1,
  212. 14, -1, -1, 21, 0x0, 0x0, 0x9L, 40,11, 10,1,
  213. 15, -1, -1, 21, 0x0, 0x0, 0xAL, 18,12, 19,1,
  214. 16, -1, -1, 21, 0x0, 0x0, 0xBL, 13,14, 29,1,
  215. 0, -1, -1, 21, 0x20, 0x0, 0xCL, 9,15, 37,1};
  216.  
  217. long rs_trindex[] = {
  218. 0L};
  219.  
  220. struct foobar {
  221.         int     dummy;
  222.         int     *image;
  223.         } rs_imdope[] = {
  224. 0, &IMAG0[0]};
  225.  
  226.  
  227. int     contrl[11];
  228. int     intin[80];
  229. int     ptsin[256];
  230. int     intout[45];
  231. int     ptsout[12];
  232. int     gl_wchar;
  233. int     gl_hchar;
  234. int     gl_wbox;
  235. int     gl_hbox;
  236. int     vdi_handle;
  237. int     work_out[57];
  238. int     work_in[11];
  239. int     gl_rmsg[8];
  240. int     gl_apid;
  241. int     ev_which;
  242. int     menu_id;
  243. long    buf_alloc, buf_read;
  244. long    logadr, physadr;
  245. long    tree;
  246. int     res, ret, i;
  247. int     rs_objnum[1+1];
  248. int     color;
  249.  
  250. fix_trindex()
  251. {
  252.         int    test, ii;
  253.  
  254.         for (ii = 0; ii < 1; ii++)
  255.         {
  256.                 test = (int) rs_trindex[ii];
  257.                 rs_objnum[ii] = test;
  258.                 rs_trindex[ii] = (char *) &rs_object[test];
  259.         }
  260.         rs_objnum[ii] = 17;
  261. }
  262.  
  263. fix_objects()
  264. {
  265.         int    test, ii;
  266.  
  267.         for (ii = 0; ii < 17; ii++)
  268.         {
  269.                 test = (int) rs_object[ii].ob_spec;
  270.                 switch (rs_object[ii].ob_type) {
  271.                         case 32:
  272.                         case 28:
  273.                         case 26:
  274.                                 fix_str(&rs_object[ii].ob_spec);
  275.                                 break;
  276.                         case 21:
  277.                         case 22:
  278.                         case 29:
  279.                         case 30:
  280.                                 rs_object[ii].ob_spec
  281.                                 = (char *) &rs_tedinfo[test];
  282.                                 break;
  283.                         case 23:
  284.                                 rs_object[ii].ob_spec
  285.                                 = (char *) &rs_bitblk[test];
  286.                                 break;
  287.                 }
  288.         }
  289. }
  290.  
  291. fix_tedinfo()
  292. {
  293.         int    ii;
  294.  
  295.         for (ii = 0; ii < 13; ii++)
  296.         {
  297.                 fix_str(&rs_tedinfo[ii].te_ptext);
  298.                 fix_str(&rs_tedinfo[ii].te_ptmplt);
  299.                 fix_str(&rs_tedinfo[ii].te_pvalid);
  300.         }
  301. }
  302.  
  303. fix_str(where)
  304. long    *where;
  305. {
  306.         *where = (long)(rs_strings[(int) *where]);
  307. }
  308.  
  309. fix_bitblk()
  310. {
  311.         int    ii;
  312.  
  313.         for (ii = 0; ii < 1; ii++) fix_img(&rs_bitblk[ii].bi_pdata);
  314. }
  315.  
  316. fix_img(where)
  317. long    *where;
  318. {
  319.         *where = (long)( (char *) rs_imdope[(int) *where].image);
  320. }
  321.  
  322. fix_xywh()
  323. {
  324.         int    i, j, k;
  325.  
  326.         for (i=0; i<1; i++)
  327.         {
  328.                 k = rs_objnum[i+1] - rs_objnum[i];
  329.                 for (j=0; j<k; j++) rsrc_obfix(rs_trindex[i], j);
  330.         }
  331. }
  332.  
  333. screen_protect()
  334. {
  335.         graf_mouse(256, 0x0L);
  336.         logadr = xbios(3);
  337.         physadr = xbios(2);
  338.         res = (int)xbios(4);
  339.         color = xbios(7,0,0);
  340.         buf_alloc = gemdos(0x48,32255L);
  341.         buf_read = buf_alloc/256;
  342.         buf_read = (buf_read + (buf_read * 256 != buf_alloc)) * 256;
  343.         xbios(5,buf_read,buf_read,res);
  344.         while(!gemdos(0x6,0xff));
  345.         xbios(7,0,color);
  346.         xbios(5,logadr,physadr,-1);
  347.         gemdos(0x49,buf_alloc);
  348.         graf_mouse(257, 0x0L);
  349. }
  350.  
  351. main()
  352. {
  353.         int     xdial, ydial, wdial, hdial, exitobj, state;
  354.  
  355.         appl_init();
  356.         vdi_handle = graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox);
  357.         menu_id = menu_register(gl_apid,"  Screen Protect    ");
  358.  
  359.         fix_trindex();
  360.         fix_objects();
  361.         fix_tedinfo();
  362.         fix_bitblk();
  363.         fix_xywh();
  364.  
  365.         for(;;)
  366.         {
  367.                 ev_which = evnt_mesag(gl_rmsg);
  368.                 if (gl_rmsg[0] == 40 && gl_rmsg[4] == menu_id)
  369.                 {
  370.                         for (i=0; i<10; i++) work_in[i]=1;
  371.                         work_in[10]=2;
  372.                         v_opnvwk(work_in,&vdi_handle,work_out);
  373.  
  374.                         tree = rs_trindex[0];
  375.                         form_center(tree, &xdial, &ydial, &wdial, &hdial);
  376.                         form_dial(0,0,0,0,0, xdial, ydial, wdial, hdial);
  377.                         form_dial(1,0,0,0,0, xdial, ydial, wdial, hdial);
  378.  
  379.                         objc_draw(tree, 0, 8, xdial, ydial, wdial, hdial);
  380.                         exitobj = form_do(tree, 0);
  381.                         state = ((int) *((int *)((tree + (exitobj)
  382.                               * sizeof(OBJECT) + 10))));
  383.                         (*((int *)((tree + (exitobj) * sizeof(OBJECT)
  384.                          + 10))) = state & ~0x1);
  385.  
  386.                         form_dial(2,0,0,0,0, xdial, ydial, wdial, hdial);
  387.                         form_dial(3,0,0,0,0, xdial, ydial, wdial, hdial);
  388.  
  389.                         if (exitobj == 7) screen_protect();
  390.                         v_clsvwk(vdi_handle);
  391.                 }
  392.         }
  393. }
  394.  
  395.